/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.uca.sisbec.actions.cargar;

import com.uca.sisbec.commons.HibernateAction;
import com.uca.sisbec.forms.cargar.CargarDatosForm;
import com.uca.sisbec.forms.manto.BecarioForm;
import com.uca.sisbec.helpers.cargar.CargarDatosHelper;
import com.uca.sisbec.helpers.manto.BecarioHelper;
import com.uca.sisbec.helpers.manto.UniversidadHelper;
import com.uca.sisbec.mapping.Becario;
import com.uca.sisbec.mapping.Carrera;
import com.uca.sisbec.mapping.CarreraXBecario;
import com.uca.sisbec.mapping.Universidad;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.math.BigDecimal;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.*;
import org.apache.struts.upload.FormFile;

/**
 *
 * @author Alex
 */
public class CargarDatosAction extends HibernateAction {
    
    public ActionForward init(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response) throws Exception {
        return mapping.findForward("success");
    }
    
    public ActionForward CargarDatosSAB(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response) throws Exception {
        CargarDatosForm cdf = (CargarDatosForm) form;
        FormFile archivo = cdf.getFile();
        String contentType = archivo.getContentType();
        BecarioHelper bh = new BecarioHelper(getSession(request));
        UniversidadHelper uh = new UniversidadHelper(getSession(request));
        Universidad u = uh.GetUCA();
        BecarioForm bf = new BecarioForm();
        if (contentType != null) {
            BufferedReader lector = LeerArchivo(archivo);
            String lineaArchivo;
            int totalLineas = 0;
            boolean reading = true;
            List<Becario> becariosList = new ArrayList<Becario>();
            while(reading){
                lineaArchivo = LeerLinea(lector);
                if(lineaArchivo == null){
                    reading = false;
                } else {
                    System.out.println(lineaArchivo);
                    Becario becario = CrearBecario(lineaArchivo, u);
                    //bf.setCarnet(becario.getCarnet());
                    //if(bh.validateBecario(bf) == true){
                    becariosList.add(becario);
                    //}
                    //totalLineas++;
                }
            }
            if(becariosList.size() > 0) {
                CargarDatosHelper cdh = new CargarDatosHelper(getSession(request));
                //cdh.CargarDatosBecariosDB(becariosList);
                int totalBecGuardados = 0;
                for(int i = 0; i < becariosList.size(); i++){
                    bf.setCarnet(becariosList.get(i).getCarnet());
                    if(bh.validateBecario(bf) == true){
                        cdh.CargarDatosBecarioDB(becariosList.get(i));
                        totalLineas++;
                        totalBecGuardados++;
                    } else {
                        totalLineas++;
                    }
                }
                
                
                ActionMessages msg = new ActionMessages();
                if(totalBecGuardados == totalLineas){
                    msg.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage("carga.exitosa"));
                } else {
                    msg.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage("carga.nototal"));
                }
                request.setAttribute("msg", msg);
            } else {
                ActionErrors errors = new ActionErrors();
                errors.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage("archivo.vacio"));
                request.setAttribute("errors", errors);
            }
        }
        return mapping.findForward("success");
    }
        
    private BufferedReader LeerArchivo(FormFile file) throws Exception {
        BufferedReader reader = new BufferedReader(new InputStreamReader(file.getInputStream()));
        return reader;
    }
    
    private String LeerLinea(BufferedReader reader) throws Exception {
        return reader.readLine();
    }
    
    private Becario CrearBecario(String lineaArchivo, Universidad u) throws Exception {
        Becario b = new Becario();
        String[] registros = lineaArchivo.split("\\|");
        String tels = "";
        
        b.setCarnet(registros[0]);
        b.setNombres(registros[1]);
        b.setApellidos(registros[2]);

        if(!(registros[3].equals("<nulo>"))){
            tels = tels + registros[3];
        }
        if(!(registros[4].equals("<nulo>"))){
            tels = tels + "|" + registros[4];
        }
        if(!(registros[5].equals("<nulo>"))){
            tels = tels + "|" + registros[5];
        }
        if(!(registros[6].equals("<nulo>"))){
            tels = tels + "|" + registros[6];
        }
        if(!(tels.equals(""))){
            b.setTels(tels);
        }

        if(!(registros[7].equals("<nulo>"))){
            b.setEmails(registros[7]);
        }

        b.setDirActual(registros[8]);

        DateFormat formatter = new SimpleDateFormat("yy-mm-dd");
        Date fechaNac = (Date) formatter.parse(registros[9]);
        b.setFechaNac(fechaNac);

        if(registros[10].equals("1")){
            b.setFondo("FA");
        } else {
            b.setFondo("MU");
        }
        
        b.setUniversidad(u);
        b.setEstCivil("");
        b.setLugarNac("*Actualizar*");
        b.setDirOrigen("*Actualizar*");
        b.setMcipioOrigen("*Actualizar*");
        b.setDeptoOrigen("*Actualizar*");
        b.setInstEduMedia("*Actualizar*");
        b.setDirIem("*Actualizar*");
        b.setCma(0);
        b.setCum(java.math.BigDecimal.valueOf(0));
        //b.setFoto("foto01.png");
        b.setEstado("A");
        b.setSexo("");
        List<Carrera> lc = new ArrayList(u.getCarreras());
        b.setCodCarrera(lc.get(0).getId().getCodCarrera());
        
        return b;
    }
    
}
